package com.nys.conci.base.componentes.seguridad;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.faces.component.UIComponent;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.ActionEvent;
import javax.faces.event.ActionListener;
import org.primefaces.component.menu.Menu;
import org.primefaces.component.menuitem.MenuItem;
import org.primefaces.component.submenu.Submenu;
import org.primefaces.model.DefaultMenuModel;
import org.primefaces.model.MenuModel;
/**
 * 
 * Esta clase se encarga de controlar la accion al seleccionar en el menu
 * 
 * @since 01/02/2012
 * @author Adam M. Gamboa González
 */
public class MenuItemListener implements ActionListener {

    @Override
    public void processAction(ActionEvent ae) throws AbortProcessingException {
        String navegacion = (String) ae.getComponent().getAttributes().get("navegacion");
        Integer id_elemento = (Integer) ae.getComponent().getAttributes().get("id_elemento");
        MenuModel ruta_migaja = this.obtenerRuta(ae);
    }

    /**
     * Obtiene la ruta segun la opcion del menu seleccionada
     * @param ev ActionEvent
     * @return MenuModel
     */
    public MenuModel obtenerRuta(ActionEvent ev) {

        MenuModel ruta = new DefaultMenuModel();
        Object parent = ev.getComponent();
        List<MenuItem> items_ruta = new ArrayList<MenuItem>();
        
        // mientras que no sea instancia de menu el padre
        while (!(parent instanceof Menu)) {
            MenuItem item_generico = new MenuItem();
            if (parent instanceof Submenu) {
                Submenu temp = (Submenu) parent;
                item_generico.setValue(temp.getLabel());
                item_generico.setUrl("#");
                items_ruta.add(item_generico);
            }

            if (parent instanceof MenuItem) {
                MenuItem temp = (MenuItem) parent;
                item_generico.setValue(temp.getValue());
                item_generico.setUrl("#");
                items_ruta.add(item_generico);
            }

            parent = ((UIComponent) parent).getParent();
        }
        
        //Agrego el elemento de la raiz que necesita el breadCrumb
        MenuItem item_home = new MenuItem();
        item_home.setValue("Categories");
        item_home.setUrl("#");
        items_ruta.add(item_home);

        //ruta = espejoRuta(ruta);
        Collections.reverse(items_ruta);
        int i = 0;
        for(MenuItem mi : items_ruta){
            String id_mi = "migaja_"+i;
            mi.setId(id_mi);
            ruta.addMenuItem(mi);
            i++;
        }
        
        return ruta;
    }

}